<!DOCTYPE html>
<html>
<head>
    <title>First Example</title>
    <meta charset="UTF-8"/>
</head>
<body>
<p>Hello World PHP</p>

<!--Một dạng khác để khai báo mã php: dùng thẻ script-->
<script language="php">
    echo 'Hello, this is text in script tag';
</script>

<!--Khai báo mã php bằng cặp thẻ php -->
<?php
echo '<p>This is a paragraph in PHP code.';
?>

<!--Dạng short tag: chỉ in ra giá trị dưới dạng plain text trong ma html -->
<?= 'Some text in a short tag.<br/>' ?>

<?php
//Khai báo biến bằng cách gán giá trị cho biến đó.
$i = null;
$string = "This's is my father.";
/*
 * Kiểu chuổi với quote khác nhau, (') nhanh hơn (") khi thực thi
 * do (") phải dò qua các giá trị biến có chứa trong chuỗi
 */
$string2 = 'String contain backslash (\)';
/*
 * Ký tự \ sẽ được in ra nếu sau nó không kèm theo ký tự đặc biệt.
 */
echo $string . " " . $string2;

$check_goto = 1;
hello:


//Biến dạng số và ép kiểu.
$i = 3.5;
$j = 4;
$k = '3 - hello world';
$l = (int)$k;
$m = 'facebook';
$n = (double)$m;

echo "\$i = $i \$j = $j \$k = $k \$l = $l \$m = $m \$n = $n";
/*Khi ép kiểu string về số, nếu không hợp lệ sẽ trả về giá trị 0*/
/*Ngoài ra có thể sử dụng các hàm intval() doubleval() floatval() strval() để ép kiểu ...*/


// Kiểu boolean, gán giá trị trực tiếp true /false hoặc từ phép toán điều kiện
// chú ý trong PHP có 2 phép toán so sánh khác nhau '==' chỉ so sánh giá trị
// '===' so sánh giá trị đồng thời kiểu dữ liệu của hai biến
$check = true;
if ($check) {
    echo "Biến boolean có giá trị $check <br/>"; //$check khi in ra có giá trị 1 nếu đúng và 0 nếu sai.
}
if ($check == 1) {
    echo ' $check = 1 <br/>'; // so sánh giá trị
}
if ($check !== 1) {
    echo ' $check không phải kiểu số <br/>'; //so sánh kiểu
}


//Mảng trong PHP
//Mảng không khóa:
$mang_khong_khoa = array(1, 2, 3, 4, 5, 6, 7);
$mang_khong_khoa[3] = 'hello'; //kiểu dữ liệu từng biến có thể khác nhau
$mang_khong_khoa[55] = 55; //tự động thêm vào cuối mảng nếu không có hoặc sai chỉ số
$mang_khong_khoa[] = 'thêm vào cuối';
foreach ($mang_khong_khoa as $val) {
    echo $val . "<br/>";
}

$date = '9/5';
//Mảng có khóa (chỉ số được thay bằng các khóa cụ thể ):
$mang_co_khoa = array(
    'title' => 'Title',
    'name' => 'Name',
    'date' => $GLOBALS['date'] // lấy giá trị từ biến date đã khai báo trước
);
$mang_co_khoa[] = 'thêm vào cuối mảng có khóa'; // chỉ số được xác định bằng số
$mang_co_khoa[] = 'thêm tiếp vào cuối mảng có khóa';
$mang_co_khoa['address'] = 'Dai Co Việt';
foreach ($mang_co_khoa as $key => $value) {
    echo "$key có giá trị: $value <br/>";
}

//Mảng nhiều chiều:
$mang_nhieu_chieu = array(
    array(
        'name2' => 'Name 2',
        'pass2' => "Pass 2"
    ),
    array(
        'name2' => 'Name 3',
        'pass3' => 'Pass 3'
    )
);
foreach ($mang_nhieu_chieu as $mang) {
    foreach ($mang as $key_con => $val_con) {
        echo "$key_con : $val_con <br/>";
    }
}
echo $mang_nhieu_chieu[1]['pass3']; // Xác định một biến trong mảng

print("Hello $mang_nhieu_chieu[1]['pass3']");
// Không thể dùng hàm print trong trường hợp này
print('Hello $mang_nhieu_chieu[1][\'pass3\']');

//In theo format: printf()
printf("Hello, PHP is %s!", 'awesome');
// Ngoài ra còn có hàm sprintf() cách dùng tương tự nhưng printf() in ra trình duyệt
// trong khi sprintf() chỉ trả về giá trị là một kiểu string
# Một kiểu comment khác trong PHP


$a =& $b; // Khi $b thay đổi thì $a sẽ thay đổi theo, tương tự tham chiếu trong C
$b = 'Hoàng Hải';
echo $a;

$c =& $mang_nhieu_chieu[1]['pass3']; //tham chiếu tới vị trí nhớ của mảng 1-pass3
$c = 'GreenField'; //thay đổi giá trị tại biến tham chiếu này
foreach ($mang_nhieu_chieu as $mang) {
    foreach ($mang as $key_con => $val_con) {
        echo "$key_con : $val_con <br/>";
    }
}

@include_once('hello_world.php');
/*
 * @ dùng để ngăn ngừa các thông báo lỗi xuất hiện trên trình duyệt
 * include: chương trình vẫn tiếp tục nếu file include không tồn tại
 */

/*
 * nếu file require không tồn tại, mã PHP sẽ ngừng thực thi tại đây
 */
function getString()
{
    return 'Hello';
}

//return 0;
/*
 * Khi gọi return bên ngoài một function: chương trình sẽ kết thúc tại đây
 */

$i = print("Nothing end with " . getString());
echo $i . '<br/>';

if (false) {
    echo 'true';
} elseif (false) {
    echo 'false';
} else {
    echo 'nothing<br/>';
}

if ($check_goto++ < 2) {
    goto hello;
}
/*
 * becareful with this statement
 * goto: di chuyển tới nhãn (label) đã khai báo trong mã php
 * luôn sử dụng goto sau khi đã kiểm tra điều kiện
 */

/*echo 'Print out Hello string.<br/>';
header("Location: http://" . $_SERVER['HTTP_HOST'] . '/study-php/absolute/02-test.php');*/

// Redirect to another resource.

function test()
{
    $one = 'Hello';
    $two = 'World';
    return array($one, $two, "Addition");
}

list($e, $f, $g) = test(); //Khai báo biến và lấy giá trị trả về từ một mảng bằng hàm list()
echo $e . ' ' . $f . $g . '<br/>';

$array = test();
foreach ($array as $key_moi => $val_moi) {
    echo $key_moi . ': ' . $val_moi . '<br/>';
}


echo 'PATH_INFO: ' . $_SERVER['PATH_INFO'] . '<br/>';
echo 'REQUEST_METHOD: ' . $_SERVER['REQUEST_METHOD'] . '<br/>';
echo 'HTTP_USER_AGENT: ' . $_SERVER['HTTP_USER_AGENT'] . '<br/>';
echo 'HTTP_REFERER: ' . $_SERVER['HTTP_REFERER'] . '<br/>';
echo 'REMOTE_ADDR: ' . $_SERVER['REMOTE_ADDR'] . '<br/>';
echo 'SERVER_NAME: ' . $_SERVER['SERVER_NAME'] . '<br/>';
echo 'HTTP_HOST: ' . $_SERVER['HTTP_HOST'] . '<br/>';
echo 'DOCUMENT_ROOT: ' . $_SERVER['DOCUMENT_ROOT'] . '<br/>';

?>
<form action="02-test.php" method="post">
    <input type="submit" value="Send Redirect"/>
</form>
</body>
</html>
